//函数：
//__builtin_popcount()//返回输入数据中，二进制中‘1’的个数。
// __builtin_popcount = int
// __builtin_popcountl = long int
// __builtin_popcountll = long long


//保留k位二进制，如果又大于k位的则舍弃： mod(2^k);
//在k进制下的每一位数 ：while(n) num.push_back(n % k),n /= k;

//同或运算  x,y做同或运算，每一个数都严格小于2^m

//两个式子异或和相等 == 所有数的异或和为0

//&的越多，答案可能会越小
x ^ y^((1 << m) - 1)
a^a=0,0^a=a。
a + b == (a | b) + (a & b);